package satk.beans.session;

import java.security.Principal;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import satk.objetos.Usuario;

/**
 * <h3>UserManager.java</h3>
 * <div><em>Fecha de creación: 28/04/2011, 10:10:02 AM.</em></div>
 * <p></p>
 * @author Sergio Flores Genis <sf.cancun@gmail.com>
 */
@ManagedBean
@SessionScoped
public class UserManager
        implements java.io.Serializable {

    private Usuario usuario;
    private boolean login = false;
    private boolean logout = false;

    public UserManager() {
        usuario = new Usuario("Invitado", null, null);
    }

    public boolean isLogin() {
        return login;
    }

    public synchronized Usuario getUsuario() {
        if (logout) {
            logout = false;
            usuario = new Usuario("Invitado", null, null);
            return usuario;
        }
        Principal pri = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
        if (!login && usuario.getIdentificador() == 0 && pri != null) {
            Usuario u = new satk.database.ManagerUsuarios().getByName(pri.getName());
            usuario = u;
            login = true;
        }
        return usuario;
    }

    public synchronized String logout() {
        if (login) {
            FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
            FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
            usuario = new Usuario("Invitado", null, null);
            login = false;
            logout = true;
        }
        return null;
    }

    public static UserManager getSessionInstance() {
        FacesContext fContext = javax.faces.context.FacesContext.getCurrentInstance();
        HttpSession hSession = (HttpSession) fContext.getExternalContext().getSession(false);
        UserManager usrManager = (UserManager) hSession.getAttribute("userManager");
        return usrManager;
    }
}